<?php
declare (strict_types=1);

namespace app\backend\middleware;

use app\backend\model\IpBlackList;
use think\facade\Cache;

class CheckIp
{
    /**
     * 处理请求
     *
     * @param \think\Request $request
     * @param \Closure $next
     * @return Response
     */
    public function handle($request, \Closure $next)
    {
        /**
         * 获取当前登录用户的ip地址，并判断是否为黑名单用户
         * 此处为两个小时有效期，两个小时之后会重新获取，判断一次
         * 如果后台设置为黑名单用户，请及时删除缓存，保证立即生效
        */
        $ip = request()->ip();
        $isOk = Cache::get(':ip_' . $ip);
        if (!empty($isOk) && $isOk == 1) return $next($request);
        $res = IpBlackList::where('ip_address', $ip)->count();
        if ($res > 0) {
            Cache::set(':ip_' . $ip, -1, 7200);
            return errMsg(403, '您所在的地区禁止访问！');
        }
        Cache::set(':ip_' . $ip, 1, 7200);
        return $next($request);
    }
}
